lua |
您所在的位置:网站首页 › 1 1不是二谜底是什么 › lua |
function test1(tt)
tt = {1, 3, 5}
end
function test2(tt)
tt[1] = 2
tt["a"] = "hello"
end
t = {4, 5, 6}
test1(t)
for k,v in pairs(t) do
print(v)
end
print("------")
t = {4, 5, 6}
test2(t)
for k,v in pairs(t) do
print(v)
end
test1改不了外部的t的值。test1如果想改变外部的t的值,可以把修改后的table返回给t。 test2能改变外部t的值,但是前提是传入的外部tt不能为nil。如果t为nil,在函数内再分配空间、赋值,外部的t还是为nil。可以先在外部给t分配内存 tt = {},然后再作为参数传递给test2,此时在test2里面修改tt的值,外部t也会改变。 lua中table的引用传递只能是修改该table对象的内部元素,对table对象的复制操作,无法做到引用传递的效果。 所谓值传递,其实是一种拷贝传递,函数调用时,在函数栈中, 拷贝实参的值到形参,所以,对形参的修改当然不会影响实参。 要做到函数内部修改,在外部可见,一种方式是传递地址,如这里的table的内部元素,另一种是传递引用,引用传递需要语言级别的支持,如c的&引用传递符号,表示该变量不是拷贝传递,形参是实参的别名。(其实底层的实现用的是指针) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |